package Componentes;

import javax.swing.ImageIcon;

import Graficos.ComponenteGrafico;

/**
 * ProyectoX TDP 2011
 * @author  Ma Gimena Ramos- LU:82716
 * @autor Brenda Dilschneider- LU: 92774
 *
 */

public class SuperHongo extends Componente implements Runnable{
	private int controlPos;
	private Thread hilo;
private int sentido;

	/**
	 * constructor	
	 */
	public SuperHongo(){
			super();
			sentido=1;
			controlPos=0;	
			visible=false;
			hilo= new Thread(this);
			transitable=true;}


	/**
	 * clona el objeto y devuelve el clon de tipo SuperHongo
	 */
	public Object clonar()
	{
		SuperHongo v = new SuperHongo();

	ComponenteGrafico c=  new ComponenteGrafico(null);
		
		v.setGrafico(c);
		
		return v;
	}
	
	/**
	 * hace crecer al mario
	 */
		@Override
		public void chocarMario() {
			if (visible){
			if (!destruido)
			{if (!mario.estachiquito())
				{mario.obtenerPartida().aumentarPuntaje(10);
							destruirHilo();
				}
			else
				{mario.obtenerPartida().aumentarPuntaje(50);
				if (!mario.invencible())
			
				mario.MarioGrande();
					else
						{mario.MarioEstrellaG();
				mario.CambiarTamaño();}
				mario.obtenerPartida().aumentarPosicionActual(0, -1);
				mario.setBounds(16*mario.obtenerPartida().obtenerPosicionActual().getX(), 16*mario.obtenerPartida().obtenerPosicionActual().getY(), 16, 32);
				mario.setLocation (16*mario.obtenerPartida().obtenerPosicionActual().getX(),16*mario.obtenerPartida().obtenerPosicionActual().getY());
				
				
				destruirHilo();}
				
			}
			}
		}
		
		/**
		 * arranca el hilo del objeto
		 */
		@Override
	public void arrancarHilo(){
		
			this.comp.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Dibujos/hongo.gif")));
            
					hilo.start();
		
	}
		/**
		 * se mueve por el nivel controlando si choca con algun componente o mario
		 */
		@Override
		public void run() {
			
			{ 
				while( true ) {
					if (sentido==1){
				this.comp.setLocation(this.comp.getLocation().x+1, this.comp.getLocation().y);
			controlPos+=1;
			
			if (controlPos==16)
				{controlPos=0;
			     this.setPosicion(this.obtenerPosicion().getX()+1,this.obtenerPosicion().getY());
			     if (mario.estachiquito())
			     {if (this.obtenerPosicion().getX()== mario.obtenerPartida().obtenerPosicionActual().getX() && this.obtenerPosicion().getY()== mario.obtenerPartida().obtenerPosicionActual().getY())
			    	 chocarMario();}
			   else
			   {if (this.obtenerPosicion().getX()== mario.obtenerPartida().obtenerPosicionActual().getX() && this.obtenerPosicion().getY()== mario.obtenerPartida().obtenerPosicionActual().getY()+1)
			    	 chocarMario();}
			     try {
					hilo.sleep(400);
					
					
					
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
				gravedad.Caida(this);
				}
			
					}else{//va hacia la izquierda
				this.comp.setLocation(this.comp.getLocation().x-1, this.comp.getLocation().y);
				controlPos+=1;
		if (controlPos==16)
			{controlPos=0;
		     this.setPosicion(this.obtenerPosicion().getX()-1,this.obtenerPosicion().getY());
		   if (mario.estachiquito())
		     {if (this.obtenerPosicion().getX()== mario.obtenerPartida().obtenerPosicionActual().getX() && this.obtenerPosicion().getY()== mario.obtenerPartida().obtenerPosicionActual().getY())
		    	 chocarMario();}
		   else
		   {if (this.obtenerPosicion().getX()== mario.obtenerPartida().obtenerPosicionActual().getX() && this.obtenerPosicion().getY()== mario.obtenerPartida().obtenerPosicionActual().getY()+1)
		    	 chocarMario();}
		    
			Componente c1= mario.obtenerPartida().getComponente(this.obtenerPosicion().getX()-1,this.obtenerPosicion().getY())	;
			if (c1!=null)
				c1.serChocado(this);
			    try {
				hilo.sleep(400);				
			
			} catch (InterruptedException e) {
				
				e.printStackTrace();
			}
			
			gravedad.Caida(this);
			}
				if (this.obtenerPosicion().getX()==0)
					destruirHilo();
			}
				
			}}}
		

		/**
		 * llama a chocarMario
		 */
		@Override
		public void pisadoPorMario() {
		chocarMario();
			
		}

/**
 * para el hilo del objeto
 */
		@Override
		public void destruirHilo() {
			this.comp.setIcon(null);
			destruido=true;
			hilo.stop();
		}

/**
 * cambia el sentido del hongo
 */
		@Override
		public void serChocado() {
			if (sentido==1)	
				sentido=2;
				else
					sentido=1;
		}

/**
 * metodo redefinido sin uso
 */
	@Override
		public void serChocado(Componente c) {
					}


		


		
	}
